package pl.egraveyard.bo;

import pl.egraveyard.domain.Klient;
import pl.egraveyard.domain.Uzytkownik;

/**
 * Interfejs dla BO dla operacji wykonywanych na uzytkowniku
 *  ktore wykraczaja poza operacje na jednej tabeli i wymagane jest aby
 *  uruchamiane byly w jeden transakcji
 * @author gunos
 *
 */
public interface UzytkownikBO {
	/**
	 * Zapisuje uzytkownika razem z obiektem adresy
	 * @param uzytkownik uzytkownik do zapisania
	 */
	void createUser(Uzytkownik uzytkownik);
	
	/**
	 * Modyfikuje uzytkownika
	 * @param uzytkownik uzytkownik do modyfikacji
	 */
	void updateUser(Uzytkownik uzytkownik);
	
	/**
	 * Pobiera uzytkownika o podanym id
	 * @param id id poszukiwane uzytkownika
	 * @return uzytkownik o podanym id albo null
	 */
	Uzytkownik readUser(Integer id);
	
	/**
	 * Pobiera uzytkownika o podanym loginie
	 * @param login login dane uzytkownika
	 * @return uzytkownik o podanym loginie lub null
	 */
	Uzytkownik readUser(String login);
	
	/**
	 * Pobiera klienta o podanym loginie
	 * @param login login dane klienta
	 * @return kient o podanym loginie lub null
	 */
	Klient readCustomer(String login);
	
	/**
	 * Zapisuje klienta razem z obiektem adresy
	 * @param klient klient do zapisania
	 */
	void createCustomer(Klient klient);
	
	/**
	 * Modyfikuje klienta
	 * @param klient klent do modyfikacji
	 */
	void updatCustomer(Klient klient);
}
